// // 节流方法（第一次执行，最后可能不会执行）
// export const throttle = (fn, delay = 300) => {
//   var lastTime = 0;
//   return function() {
//     var nowTime = Date.now();
//     if(nowTime - lastTime > delay) {
//       fn.call(this);
//       lastTime = nowTime;
//     }
//   }
// }

// // 节流办法2（改进版：第一次不执行，每次都在最后一次执行）
// export const throttle2 = (fn, delay = 300) => {
//   var timer = null;
//   return function() {
//     if(!timer) {
//       timer = setTimeout(() => {
//         timer = null;
//         fn.apply(this);
//       }, delay);
//     }
//   }
// }

// 节流方法3（改进版：第一次执行，同时最后一次也执行）
export const throttle = (fn, delay = 300) => {
  var timer = null;
  return function() {
    var firstClick = !timer;
    if(firstClick) fn.apply(this);
    if(!timer) {
      timer = setTimeout(() => {
        timer = null;
        fn.apply(this);
      }, delay)
    }
  }
}

// // 防抖方法（第一次不执行，只有最后执行）
// export const debounce = (fn, delay = 300) => {
//   var timer = null;
//   return function() {
//     if(timer) clearTimeout(timer);
//     timer = setTimeout(() => {
//       fn.apply(this);
//     }, delay);
//   }
// }

// 防抖方法2（改进版：第一次进入执行，最后也会执行）
export const debounce = (fn, delay = 300) => {
  var timer = null;
  return function() {
    var firstClick = !timer; // 定义一个 firstClick 判断是否是第一次执行
    if(firstClick) fn.apply(this);
    if(timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this);
    }, delay);
  }
}
